package com.yulinlin.core.wrapper;

import java.util.Collection;

/**
 * 条件构造
 * P 方法参数泛型
 * R 回到上一个对象
 */
public interface IAbstractConditionWrapper<P,R> extends ISqlWrapper , IEndWrapper<R> {

    //自定义条件
    IAbstractConditionWrapper<P,R> condition(String sql);

    //=
    IAbstractConditionWrapper<P,R> eq(P name, Object value);

    //!=
    //!=
    IAbstractConditionWrapper<P,R> ne(P name, Object value);

    //<
    IAbstractConditionWrapper<P,R> gt(P name, Number value);

    //<=
    IAbstractConditionWrapper<P,R> ge(P name, Number value);

    //>
    IAbstractConditionWrapper<P,R> lt(P name, Number value);

    //>=
    IAbstractConditionWrapper<P,R> le(P name, Number value);

    //范围
    IAbstractConditionWrapper<P,R> between(P name, Object x, Object y);



    //模糊
    IAbstractConditionWrapper<P,R> like(P name, String value);



    //左模糊
    IAbstractConditionWrapper<P,R> likeLeft(P name, String value);

    //右模糊
    IAbstractConditionWrapper<P,R> likeRight(P name, String value);

    //是null
    IAbstractConditionWrapper<P,R> isNull(P name);


    //属于集合
    IAbstractConditionWrapper<P,R> in(P name, Collection<?> coll);


    //开括号
    IAbstractConditionWrapper<P,R> struct(IStructureWrapper<P,R> func);

    //下一个条件使用or
    IAbstractConditionWrapper<P,R> or();

    //下一个使用not
    IAbstractConditionWrapper<P,R> not();

   /* //开括号
    IAbstractConditionWrapper<P,R> start();

    //关括号
    IAbstractConditionWrapper<P,R> end();*/

}
